#include <iostream>
#include <math.h>
using namespace std;

class Point;//前行声明
//只有前向声明，只知道有piont这个类，不知道point是怎么实现的，但不能访问point的内容，那么我们在line类中
//只做函数的声明，不做定义
class Line
{
    //需要前向声明，使编译器知道有piont这个类
    public:
    float destance(const Point &lhs,const Point &rhs);
};
class Point
{
    public:
    Point(int x,int y)
    :_ix(x)
    ,_iy(y)
    {}
    //friend 
    friend float Line::destance(const Point &lhs,const Point &rhs);

    private:
    int _ix;
    int _iy;
};

//point 有什么东西编译器已经知道，现在对destance做定义就可以了，在外面是普通函数，就上作用域
float Line::destance(const Point &lhs,const Point &rhs)
{
    return sqrt(pow(lhs._ix - rhs._ix ,2)
                +pow(lhs._iy - rhs._iy,2));
}

void test0()
{
    Point pt(0,0);
    Point pt2(3,4);
    Line l;
    cout <<l.destance(pt,pt2) << endl;

}
int main()
{
    test0();
    return 0;
}